package com.malou.client.ventas.tarjeta;

import com.extjs.gxt.ui.client.data.BaseFilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.FilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.malou.client.MalouConstants;
import com.malou.client.util.MensajeData;
import com.malou.client.util.Utilities;


public class Tarjetas {
		private static TarjetaServiceAsync ts = GWT.create(TarjetaService.class);
		private static MalouConstants constants = GWT.create(MalouConstants.class);
		private static Integer tarjeta_id;
		public static PagingLoader<PagingLoadResult<ModelData>> loader;
		public static ListStore<BeanModel> store;
		public static TarjetaDialog tarjetaDialog;
		
		public static void getPaginate() {
			
			RpcProxy<PagingLoadResult<Tarjeta>> proxy = new RpcProxy<PagingLoadResult<Tarjeta>>() {

				@Override
				protected void load(Object loadConfig,
				      AsyncCallback<PagingLoadResult<Tarjeta>> callback) {
					ts.paginateTarjeta((FilterPagingLoadConfig) loadConfig, callback);  
					
				}  
		      
		    };
		
		    loader = new BasePagingLoader<PagingLoadResult<ModelData>>(proxy, new BeanModelReader()){  
		        @Override  
		        protected Object newLoadConfig() {  
		          BasePagingLoadConfig config = new BaseFilterPagingLoadConfig();  
		          return config;  
		        }  
		    
		      };  
	        loader.setRemoteSort(true);  
	      
	        store = new ListStore<BeanModel>(loader);
		}
		
		public static void save(Tarjeta tj) {
			tarjeta_id = tj.getId();
			
			ts.save(tj, new AsyncCallback<MensajeData>() {

				@Override
				public void onFailure(Throwable caught) {				
					MessageBox.alert(constants.sistemaMarcocruzado(), constants.errorConexion(), null);	
					store.rejectChanges();
				}

				@Override
				public void onSuccess(MensajeData data) {
					if (data.guardado) {					
						tarjetaDialog.hide();
						if(tarjeta_id != null){
							store.commitChanges();
						}else
							loader.load(0, Utilities.itemsPerPage);
						
					}
					 else {
						 tarjetaDialog.status.hide();
						
						 store.rejectChanges();
						 String msg;
						 if(data.errorTipo == 1)
							 msg = constants.TarjetaYaExiste();					 
						 else
							 msg = constants.TarjetaNoGuardado();
						 MessageBox.alert(constants.sistemaMarcocruzado(), msg, null);
					}						
				}
				
			});
		}
		
		public static void delete(Integer id) {
			  
			  ts.delete(id, new AsyncCallback<MensajeData>() {

					@Override
					public void onFailure(Throwable caught) {					
						MessageBox.alert(constants.sistemaMarcocruzado(), constants.errorConexion(), null);					
					}

					@Override
					public void onSuccess(MensajeData data) {
						if (data.guardado) {					
							Integer offset =loader.getOffset();
							loader.load(offset, Utilities.itemsPerPage);						
						}
						 else {
							 //clienteDialog.status.hide();
							 //clienteDialog.getButtonBar().enable();					 
							 MessageBox.alert(constants.sistemaMarcocruzado(), constants.TipoPrendaNoEliminado(), null);
						}						
					}
					
				});
		  }
		
		public static void deleteAll(String ids) {
			  
			  ts.deleteAll(ids, new AsyncCallback<MensajeData>() {

					@Override
					public void onFailure(Throwable caught) {					
						MessageBox.alert(constants.sistemaMarcocruzado(), constants.errorConexion(), null);					
					}

					@Override
					public void onSuccess(MensajeData data) {
						if (data.guardado) {					
							Integer offset =loader.getOffset();
							loader.load(offset, Utilities.itemsPerPage);						
						}
						 else {
							 //clienteDialog.status.hide();
							 //clienteDialog.getButtonBar().enable();					 
							 MessageBox.alert(constants.sistemaMarcocruzado(), constants.TarjetaNoEliminado(), null);
						}						
					}
					
				});
		  }
	}